package cn.iocoder.yudao.module.system.framework.examscore.template;

import cn.iocoder.yudao.module.system.controller.admin.examscore.vo.ExamScoreImportExcelVO;
import cn.iocoder.yudao.module.system.framework.examscore.config.ExamScoreTemplateProperties;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 成绩导入模板管理器
 *
 * @author 芋道源码
 */
@Component
@Slf4j
public class ExamScoreTemplateManager {

    @Resource
    private ExamScoreTemplateProperties examScoreTemplateProperties;

    @Resource
    private List<ExamScoreTemplateDataSource> templateDataSources;

    private Map<String, ExamScoreTemplateDataSource> dataSourceMap;

    @PostConstruct
    public void init() {
        dataSourceMap = new HashMap<>();
        for (ExamScoreTemplateDataSource dataSource : templateDataSources) {
            dataSourceMap.put(dataSource.getSourceType(), dataSource);
            log.info("[init][注册模板数据源：{}]", dataSource.getSourceType());
        }
    }

    /**
     * 获取模板数据
     *
     * @return 模板数据列表
     */
    public List<ExamScoreImportExcelVO> getTemplateData() {
        String sourceType = examScoreTemplateProperties.getSourceType();
        ExamScoreTemplateDataSource dataSource = dataSourceMap.get(sourceType);
        
        if (dataSource == null) {
            log.warn("[getTemplateData][未找到数据源类型：{}，使用默认数据源]", sourceType);
            dataSource = dataSourceMap.get("default");
        }
        
        if (dataSource == null) {
            log.error("[getTemplateData][默认数据源也未找到，返回空列表]");
            return new ArrayList<>();
        }
        
        List<ExamScoreImportExcelVO> templateData = dataSource.getTemplateData();
        log.info("[getTemplateData][使用数据源：{}，获取模板数据数量：{}]", sourceType, templateData.size());
        return templateData;
    }

    /**
     * 获取支持的数据源类型
     *
     * @return 数据源类型列表
     */
    public List<String> getSupportedSourceTypes() {
        return List.copyOf(dataSourceMap.keySet());
    }

    /**
     * 检查数据源是否支持
     *
     * @param sourceType 数据源类型
     * @return 是否支持
     */
    public boolean isSourceTypeSupported(String sourceType) {
        return dataSourceMap.containsKey(sourceType);
    }
}